home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 26
/
AACD 26.iso
/
AACD
/
Programming
/
AllPlaton
/
Tubes
/
Tubes6.AMOS
/
Tubes6.amosSourceCode
< prev
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
Macintosh to JP
NeXTSTEP
RISC OS/Acorn
Shift JIS
UTF-8
Wrap
AMOS Source Code
|
1997-05-16
|
59.4 KB
|
2,173 lines
' *************************************
' * *
' * Tubes V1.7 *
' * Written by Chris Hodges *
' * *
' *************************************
'
Hide
'Screen Open 0,320,442,16,0
'Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 0
'Screen Display 0,128,40,320,256
'For A=0 To 15 : Colour A,A*$111 : Next
'Wait Key
'For A=0 To 63
' Load Iff "C4D:Animationen/Tubes."+Lzstr$(A,4),0
' Wait Vbl
' For Y=15 To 48
' For X=0 To 63
' P=Turbo Point(X,Y)
' If P Then Turbo Plot X,Y,16-P
' Next
' Next
' Get Sprite 62+A,0,15 To 64,49
'Next
'Bank Delta Encode Start(3)+33852 To Start(3)+Length(3)
Extension_8_100C Start(3)+33852 To Start(3)+Length(3)
'End
ALLOCCHANNELS
If DISA Then Erase 3
If Chip Free>350000 Then NEWTITLE[0] Else NEWTITLE[1]
RECORDPICTURE
Dim D(31,1)
Dim F(12,9)
Dim HISC(15,1),HISC$(15)
LOAHISC
Restore TUBES
Dim P(12,4)
VO=0 : TB=0
Global D(),F(),P(),VO,TB,HISC(),HISC$()
For A=0 To 12
For B=0 To 4
Read P(A,B)
Next
Next
INIT
SCORE=0 : LIQ=0
Do
CHECKSAV
If SG=0
TITLE
SCORE=0
Exit If Param=1
End If
If Param=0 or SG=1
If SG=0
LEVEL=1
End If
Do
If SG=0
REBUILDGFX
NUMTUBES=Min(15+LEVEL*5,99) : TIME=45+LEVEL*15 : LEVDIF=Max(400-LEVEL*30,50)
SETTUBES[0]
Else
REBUILDGFXSAVEGAME[Start(17)]
SETTUBES[Start(17)]
SG=0
End If
WATERGO
Exit If Param
CLEANFIELDBONUS
If LEVEL mod 2
TIME=240-Min(LEVEL*10,120) : LEVDIF=1 : NUMTUBES=99
SHUFFLEBONUSGAME
WATERGO
Else
TIME=360-Min(LEVEL*15,300) : LEVDIF=1 : NUMTUBES=Max(40-(LEVEL/2)*5,5)
TETRISBONUS
End If
Inc LEVEL
Loop
GAMEOVER
Else
If Param=2
LEVEL=0
REBUILDGFX
NUMTUBES=999 : TIME=5999 : LEVDIF=0
SETTUBES[0]
WATERGO
SCORE=0
Else
If Param=3
QUIT
INSTUCTIONS
INIT
Else
QUIT
If Chip Free>350000
NEWTITLE[0]
Else
NEWTITLE[1]
End If
RECORDPICTURE
INIT
End If
End If
End If
Loop
QUIT
End
TUBES:
Data 0,0,0,0,0
Data 1,0,1,0,1
Data 0,1,1,1,0
Data 1,1,1,1,1
Data 1,1,1,1,1
Data 0,0,2,1,1
Data 0,1,2,0,1
Data 1,0,2,1,0
Data 1,1,2,0,0
Data 0,0,1,0,1
Data 1,0,1,0,0
Data 0,0,1,1,0
Data 0,1,1,0,0
Procedure ALLOCCHANNELS
Shared SOU,MUS,DISA
Do
SOU=1 : MUS=1 : DISA=0
Trap Extension_8_0956
If Errtrap
SOU=0 : MUS=0 : DISA=1
Screen Open 0,320,64,2,0
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 0
Extension_8_1204 12
Palette 0,0
T2[0,"COULD NOT ALLOCATE"]
T2[16,"AUDIO CHANNELS"]
T2[32,"(R)ETRY OR (C)ONTINUE"]
T2[48,"WITHOUT SOUND?"]
Fade 1,0,$F80
Repeat
Multi Wait : I$=Lower$(Inkey$)
Until I$="r" or I$="c"
Fade 1 : For A=0 To 15 : Multi Wait : Next
Screen Close 0
Exit If I$="c"
Else
Exit
End If
Loop
End Proc
Procedure RECORDPICTURE
If Exist("TubesRecord.iff")
Screen Open 1,16,16,2,0 : Screen Hide
Load Iff "TubesRecord.iff",0 : Screen Hide
Screen 1 : Get Palette 0
Screen 0 : For A=0 To 31 : Colour A,0 : Next
Extension_8_1204 12
Ink 1 : Gr Writing 0
T3[24,"LAST SAVED"]
T3[56,"TUBES RECORD"]
Screen Show
Fade 1 To 1
For A=0 To 299
Exit If Inkey$<>"" or Mouse Key<>0 or Fire(1)<>0
Multi Wait
Next
Fade 1
For A=0 To 15 : Multi Wait : Next
Screen Close 0
Screen Close 1
End If
End Proc
Procedure INSTUCTIONS
Shared SOU,MUS
Screen Open 0,640,256,2,$8000
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 0
Palette $888,0 : Colour Back $888
F$="Tubes.doc"
Trap Extension_8_0EA2 F$,8
If Errtrap
Locate 0,15 : Centre "Could not load Tubes.doc."
For A=0 To 199
Multi Wait
Exit If Mouse Key<>0 or Fire(1)<>0 or Inkey$<>""
Next
Colour Back 0 : Screen Close 0
Pop Proc
End If
POS=0 : ST=Start(8) : LE=Length(8)
LIN=0
For A=ST To ST+LE
If Peek(A)=10 Then Inc LIN
Next
Reserve As Work 18,LIN*8+8
OST=ST : LIN=0 : TST=Start(18)
For A=ST To ST+LE
If Peek(A)=10 Then Loke TST+LIN*8,OST : Loke TST+LIN*8+4,A-OST : Inc LIN : OST=A+1
Next
Loke TST+LIN*8,OST : Loke TST+LIN*8+4,A-OST-1 : Inc LIN
If MUS Then Extension_8_10C6 64 : Extension_8_109E 3,44
Scroll Off
For A=0 To 31
Locate 0,A : Print Peek$(Leek(TST+(POS+A)*8),Leek(TST+(POS+A)*8+4))
Next
Do
Multi Wait
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse)
MK=Mouse Key : I$=Inkey$
If(I$=Cdown$ or MK=1 or Jdown(1)<>0) and POS<LIN-32 Then Gosub TDOWN
If(I$=Cup$ or MK=2 or Jup(1)<>0) and POS>0 Then Gosub TUP
Exit If MK=3 or I$=Chr$(27)
Loop
Erase 18
Erase 8
Colour Back 0 : Screen Close 0
If MUS Then Extension_8_10A8
Pop Proc
TUP:
Screen Copy 0,0,0,640,248 To 0,0,8
Dec POS
A$=Peek$(Leek(TST+POS*8),Leek(TST+POS*8+4))
Locate 0,0 : Print A$;Space$(80-Len(A$));
Return
TDOWN:
Screen Copy 0,0,8,640,256 To 0,0,0
Inc POS
A$=Peek$(Leek(TST+POS*8+248),Leek(TST+POS*8+252))
Locate 0,31 : Print A$;Space$(80-Len(A$));
Return
End Proc
Procedure NEWTITLE[CHIP]
On Error Goto ERR
Shared MUS,SOU
RASLIN=180-( Extension_8_060E =68000)*20
If CHIP=1 Then Goto LOWCHIP
If Length(32)
Unpack 32 To 0 : Screen Hide
For A=0 To 63
Get Bob 62+A,(A mod 5)*64,(A/5)*34 To(A mod 5)*64+64,(A/5)*34+34
Next
Screen Close 0
Erase 32
End If
Unpack 13 To 0
Screen Open 1,320,256,16,0 : Screen Hide
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
Screen Open 2,320,256,16,0 : Screen Hide
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
Screen Open 3,320,256,16,0 : Screen Hide
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
Screen Open 4,320,256,16,0 : Screen Hide
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
Screen Open 6,320,256,2,0 : Screen Hide
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
Extension_8_1204 12
Gr Writing 0
Screen Open 7,320,256,2,0 : Screen Hide
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 0
Palette 0,$F
Extension_8_128A 7
MX=160 : MY=128
WIN=0 : ZP=0 : S=4 : W=32 : DD=Rnd(1023) : T1=Rnd(5)+1 : T2=Rnd(5)+1
If Extension_8_060E =68000 Then W=64
FRAME=0 : ANI=0 : BLPC=0
Screen 7
Repeat
Gosub DRARING
Until ANI=1
Screen 0
Double Buffer : Autoback 0
G=$FFF
Fade 3,0,$1,$2,$3,$4,$5,$6,$7,$0,$2,$4,$6,$8,$A,$C,$E,$0,$111,$222,$333,$444,$555,$666,$777,$888,$999,$AAA,$BBB,$CCC,$DDD,$EEE,$FFF
Screen 7
FAD=0
If MUS
Extension_8_10C6 64
Extension_8_10F2 0
Extension_8_109E 3,0
End If
TITLE=1 : TIME=400 : OANI=ANI : SPRANI=0
COMAP=1 : SPRX=Rnd(192)+64 : SPRY=Rnd(100)
SPRSY=0 : SPRSX=(Rnd(4)+1)*(Rnd(1)*2-1)
Clear Key
Do
While Amos Here=0 : Multi Wait : Wend
Multi Wait
If COMAP
Sprite 0,X Hard(SPRX),Y Hard(SPRY/4),62+SPRANI : Add SPRANI,1,0 To 63
Add SPRY,SPRSY
If SPRY>888
SPRSY=-Rnd(27)-15
Else
Inc SPRSY
End If
Add SPRX,SPRSX
If SPRX<0 or SPRX>255
SPRX=Min(Max(SPRX,0),255)
SPRSX=-SPRSX
End If
End If
Exit If Mouse Key<>0 or Inkey$<>"" or Fire(1)<>0
If FAD=-1 Then Extension_8_12B2 6,0 To 0,4 : FAD=0
If FAD=0
Extension_8_12B2 3-ANI*2+BLPC/4,BLPC and 3 To 0,3
Add BLPC,1,0 To 7
Repeat
Gosub DRARING
Until Extension_8_0338 >RASLIN
Else
Screen 0
If Colour(0)=G and FAD>0
Screen 6
Extension_8_121C 6,0
On TITLE Gosub T1,T2,T3,T4,T5,T6
Add TITLE,1,1 To 6
Extension_8_12B2 6,0 To 0,4
Screen 0
If COMAP=0
Fade 1,0,$1,$2,$3,$4,$5,$6,$7,$0,$2,$4,$6,$8,$A,$C,$E,$FFF,$EFE,$DFD,$CFC,$BFB,$AFA,$9F9,$8F8,$FFF,$DFD,$BFB,$9F9,$7F7,$5F5,$3F3,$1F1
Else
Fade 1,0,$1,$2,$3,$4,$5,$6,$7,$0,$2,$4,$6,$8,$A,$C,$E,$0,$111,$222,$333,$444,$555,$666,$777,$888,$999,$AAA,$BBB,$CCC,$DDD,$EEE,$FFF
End If
Extension_8_12B2 3-ANI*2+BLPC/4,BLPC and 3 To 0,3
FAD=-1
Else
Extension_8_12B2 1+ANI*2+BLPC/4,BLPC and 3 To 0,3
End If
Screen 7
Add BLPC,1,0 To 7
End If
If OANI<>ANI
If TIME>300
OANI=ANI
Screen 0
Fade 1,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G
FAD=1
Screen 7 : TIME=0
Else
FAD=1
End If
End If
Screen Swap 0 : Inc TIME
Loop
Screen 0
Sprite Off
Fade 3
For A=0 To 64
If MUS Then Extension_8_10C6 64-A
Extension_8_12B2 3-ANI*2+BLPC/4,BLPC and 3 To 0,3
Add BLPC,1,0 To 7
Screen Swap 0 : Wait Vbl
Next
If MUS Then Extension_8_10A8
Screen Close 0
Screen Close 1
Screen Close 2
Screen Close 3
Screen Close 4
Screen Close 6
Screen Close 7
Pop Proc
LOWCHIP:
Close Workbench
Screen Open 0,320,256,4,0
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
Palette 0,0,0,0
Screen Open 1,320,256,16,0 : Screen Hide
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
Screen Open 2,320,256,16,0 : Screen Hide
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
Screen Open 6,320,256,2,0 : Screen Hide
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
Extension_8_1204 12
Gr Writing 0
Screen Open 7,320,256,2,0 : Screen Hide
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 0
Extension_8_128A 7
MX=160 : MY=128
WIN=0 : ZP=0 : S=2 : W=32 : DD=Rnd(1023) : T1=Rnd(5)+1 : T2=Rnd(5)+1
If Extension_8_060E =68000 Then W=64
FRAME=0 : ANI=0 : BLPC=0
Screen 7
Repeat
Gosub DRARING
Until ANI=1
Screen 0
Double Buffer : Autoback 0
G=$FFF
Fade 3,0,$F,G,G
Screen 7
FAD=0
Extension_8_10C6 64
Extension_8_10F2 0
Extension_8_109E 3,0
TITLE=1 : TIME=300 : OANI=ANI
Do
While Amos Here=0 : Multi Wait : Wend
Multi Wait
Exit If Mouse Key<>0 or Inkey$<>"" or Fire(1)<>0
If FAD=-1 Then Extension_8_12B2 6,0 To 0,1 : FAD=0
If FAD=0
Extension_8_12B2 2-ANI,BLPC To 0,0
Add BLPC,1,0 To 3
Repeat
Gosub DRARING
Until Extension_8_0338 >RASLIN
Else
Screen 0
If Colour(0)=G and FAD>0
Screen 6
Extension_8_121C 6,0
On TITLE Gosub T1,T2,T3,T4,T5,T6
Add TITLE,1,1 To 6
Extension_8_12B2 6,0 To 0,1
Screen 0
Fade 1,0,$F,G,G
Extension_8_12B2 2-ANI,BLPC To 0,0
FAD=-1
Else
Extension_8_12B2 1+ANI,BLPC To 0,0
End If
Screen 7
Add BLPC,1,0 To 3
End If
If OANI<>ANI
If TIME>300
OANI=ANI
Screen 0
Fade 1,G,G,G,G
FAD=1
Screen 7
Else
FAD=1
End If
End If
Screen Swap 0 : Inc TIME
Loop
Screen 0
Fade 3
For A=0 To 64
Extension_8_10C6 64-A
Extension_8_12B2 2-ANI,BLPC To 0,0
Add BLPC,1,0 To 3
Screen Swap 0 : Wait Vbl
Next
Extension_8_10A8
Screen Close 0
Screen Close 1
Screen Close 2
Screen Close 6
Screen Close 7
QUIT:
Pop Proc
T1:
COMAP=0 : Sprite Off
T2[8,"WELCOME TO"]
Paste Bob 0,32,61
T2[112," V1.7"]
' T2[168,"EXCLUSIVE APC&TCP"]
' T2[184,"FULL VERSION"]
T2[168,"SPECIAL VERSION FOR"]
T2[184,"BERLINER SPIELEKISTE"]
Return
T2:
T2[8,"CREDITS"]
T2[20,"-------"]
T2[56,"CODING"]
T2[80,"CHRIS HODGES"]
T2[112,"GRAPHICS"]
T2[136,"CHRIS HODGES"]
T2[152,"MICHAEL KLEINER"]
T2[184,"MUSIC AND SFX"]
T2[208,"CHRIS HODGES"]
Return
T3:
T2[8,"CREDITS"]
T2[20,"-------"]
T2[56,"ADDITIONAL IDEAS"]
T2[80,"MICHAEL KLEINER"]
T2[96,"PAUL-GERHARD GEBAUER"]
T2[112,"MICHAEL UFER"]
T2[128,"MATHIAS MISCHLER"]
T2[160,"MORAL SUPPORT"]
T2[184,"MICHAEL KLEINER"]
T2[200,"PAUL-GERHARD GEBAUER"]
T2[216,"MATHIAS MISCHLER"]
T2[232,"THOMAS BUETTNER"]
Return
T4:
T2[8,"DEDICATED TO"]
T2[32,"MICHAEL KLEINER AND"]
T2[48,"MELANIE BARYGA"]
T2[80,"GREETINGS TO"]
T2[104,"FRITZ, VIP, AMIGAMAN"]
T2[120,"BRAUMEISTER, MERLIN"]
T2[136,"KRIEGSHELD, VINZENZ"]
T2[152,"RED REBEL, THE GOD"]
T2[168,"MAGIC, HOLGER, CLAW"]
T2[184,"SCHNEEMANN, SMT, A23"]
T2[200,"WOTAN, KILLER, RALLI"]
T2[216,"REYEM, MARVIN, HARRY"]
T2[232,"RALF, MARKUS, HANS"]
Return
T5:
COMAP=1 : SPRX=Rnd(192)+64 : SPRY=Rnd(100) : SPRSY=0 : SPRSX=(Rnd(4)+1)*(Rnd(1)*2-1)
' Change Bank Font 14
' T2[250,"IF YOU CAN READ THIS YOUR EYES ARE VERY GOOD!"]
' Change Bank Font 12
Return
T6:
' COMAP=0 : Sprite Off
' T2[8,"BRAUMEISTER RULEZ!"]
' T2[40,"CALL"]
' T2[56,"SIXPACK BBS"]
' T2[88,"MODEM"]
' T2[112,"+49-631-33557 "]
' T2[128,"+49-631-33612 "]
' T2[144,"+49-631-793025"]
' T2[168,"ISDN"]
' T2[192,"+49-631-793023"]
' T2[208,"+49-631-793025"]
' T2[232,"ONLY LEGAL STUFF!"]
Return
DRARING:
If WIN=0
If Z=0 : Extension_8_121C 7,0 : End If
ZZ=((Z+ZP) and 63)+1
D2= Extension_8_1114(ZZ*T1+DD,700)
D3= Extension_8_1106(ZZ*T2+DD,700)
WW=PP*W
WIN=WW+1024
Else
Z1=1024/ZZ : Z2=1024/(ZZ+S)
X1= Extension_8_1114(WIN,Z1)+MX+D2/Z1
Y1= Extension_8_1106(WIN,Z1)+MY+D3/Z1
X2= Extension_8_1114(WIN+W,Z1)+MX+D2/Z1
Y2= Extension_8_1106(WIN+W,Z1)+MY+D3/Z1
Extension_8_1030 X1,Y1 To X2,Y2,1,-1
X3= Extension_8_1114(WIN+W,Z2)+MX+D2/Z2
Y3= Extension_8_1106(WIN+W,Z2)+MY+D3/Z2
Extension_8_1030 X2,Y2 To X3,Y3,1,-1
X4= Extension_8_1114(WIN,Z2)+MX+D2/Z2
Y4= Extension_8_1106(WIN,Z2)+MY+D3/Z2
Extension_8_1030 X3,Y3 To X4,Y4,1,-1
Extension_8_1030 X4,Y4 To X1,Y1,1,-1
Add WIN,W*2
If WIN>2047+WW
WIN=0
PP=1-PP
Add Z,S
If Z>63
Z=0
If CHIP=0
Extension_8_1058 7,0 To 1+ANI*2+FRAME/4,FRAME and 3
Else
Extension_8_1058 7,0 To 1+ANI,FRAME
End If
Inc FRAME : Add ZP,-1
If FRAME=8-CHIP*4
ANI=1-ANI : FRAME=0 : DD=Rnd(1023) : T1=Rnd(5)+1 : T2=Rnd(5)+1
ZP=0
End If
End If
End If
End If
Return
ERR:
For A=0 To 7 : Trap Screen Close A : Next
Extension_8_10A8
Resume QUIT
End Proc
Procedure INIT
Screen Open 2,320,256,2,0 : Screen Hide
Curs Off
Extension_8_1204 10
TB=Text Base
Unpack 9 To 1 : Screen Hide
For A=0 To 12
Get Block A+1,A*16,0,16,16,1
Get Bob A+1,A*16,0 To A*16+16,16
Next
NEWTUBCOL
Screen Open 0,320,256,16,0
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
For A=0 To 31 : Colour A,0 : Next
End Proc
Procedure NEWTUBCOL
Shared LIQ,CURVSAM,CURVFREQ
S=Screen
Screen 1
Repeat
TCOL=Rnd(4095)
RV= Extension_8_03B2(TCOL) : GV= Extension_8_03C0(TCOL) : BV= Extension_8_03D0(TCOL)
Until RV+GV+BV>32
Colour 5,TCOL
Colour 6, Extension_8_0A0E((RV*3)/5,(GV*3)/5,(BV*3)/5)
Colour 7, Extension_8_0A0E((RV*3)/8,(GV*3)/8,(BV*3)/8)
If LIQ=0 Then AC1=$F : AC2=-$440 : CURVSAM=13 : CURVFREQ=9000
If LIQ=1 Then AC1=-$444 : AC2=0 : CURVSAM=24 : CURVFREQ=10000
If LIQ=2 Then AC1=$444 : AC2=0 : CURVSAM=17 : CURVFREQ=16500
For A=0 To 7
Colour A+8, Extension_8_0EFC( Extension_8_0EFC(Colour(A),AC1,0 To $FFF),AC2,0 To $FFF)
Next
For A=0 To 15
Colour A+16, Extension_8_0EFC(Colour(A),$444,0 To $FFF)
Next
Screen 2
Get Palette 1
For A=0 To 7 : Colour A, Extension_8_0EFC(Colour(A),-$222,0 To $FFF) : Next
For A=0 To 7 : Colour A+8,Colour(A) : Next
If S<>-1 Then Screen S
End Proc
Procedure QUIT
Fade 1 : For A=0 To 15 : Multi Wait : Next
Screen Close 1
Screen Close 2
Screen Close 0
End Proc
Procedure TITLE
Shared SCORE,LEVEL,SOU,MUS,DISA,LIQ
Dim YN$(1),LIQ$(2)
YN$(0)="Off "
YN$(1)="On "
LIQ$(0)="Water"
LIQ$(1)="Oil "
LIQ$(2)="Milk "
NEWTUBCOL
Screen 0
Fade 1 : For A=0 To 15 : Multi Wait : Next
Cls 0
Screen Copy 1,0,16,320,80 To 0,0,0
Ink 15,0 : Set Pattern -1
Bar 0,64 To 320,256
Put Block 6,0,64
Put Block 7,304,64
Put Block 8,0,240
Put Block 9,304,240
For A=1 To 18
Put Block 3,A*16,64
Put Block 3,A*16,240
Next
For A=5 To 14
Put Block 2,0,A*16
Put Block 2,304,A*16
Next
If MUS
Extension_8_10C6 64
Extension_8_10F2 0
If SCORE>HISC(15,0)
Extension_8_109E 3,30
Else
Extension_8_109E 3,0
End If
Else
If SOU
Extension_8_13C6 3
End If
End If
Fade 1 To 2 : For A=0 To 14 : Multi Wait : Next
Clear Key
PAG=0
If SCORE>HISC(15,0) Then Gosub ENTERHISC
MPOS=4
Limit Mouse X Hard(16),Y Hard(128+DISA*32) To X Hard(14*16-1),Y Hard(223)
Multi Wait
Y Mouse=Y Hard(144+MPOS*16) : PAR=0 : PAGCO=0
Do
Do
While Amos Here=0 : Multi Wait : Wend
If PAG=0 Then Gosub CREDIZ Else Gosub HISCORE
Extension_8_128A 2
Extension_8_12B2 2,0 To 0,3
Extension_8_1258 : Wait Vbl
Screen 2 : For A=0 To 7 : Colour A+8,$FFF : Next : Screen 0
Fade 2 To 2
For A=0 To 31 : Multi Wait : Next
For A=0 To 199
I$=Inkey$ : MK=Mouse Key or Fire(1)
Multi Wait
Exit If I$<>"" or MK<>0,2
Next
If PAGCO=7 Then PAR=4 : Exit 2
Screen 2 : For A=0 To 7 : Colour A+8,Colour(A) : Next : Screen 0
Fade 1 To 2
For A=0 To 15 : Multi Wait : Next
PAG=1-PAG : Inc PAGCO
Loop
If I$=Chr$(27) Then PAR=1 : Exit
Extension_8_128A 2
Screen 2 : For A=0 To 7 : Colour A+8,Colour(A) : Next : Screen 0
Fade 1 To 2
For A=0 To 15 : Multi Wait : Next
Gosub MENUTEXT
Extension_8_12B2 2,0 To 0,3
Extension_8_1258 : Wait Vbl
Screen 2 : For A=0 To 7 : Colour A+8,$FFF : Next : Screen 0
Fade 2 To 2
TIM=0
Colour 17,$FFF : Colour 18,$888 : Colour 19,0
OMK=0 : PAGCO=0
Repeat
While Amos Here=0 : Multi Wait : Wend
Multi Wait : Inc TIM
JM=(Jup(1)-Jdown(1))*2
YM=Y Screen(Y Mouse)+JM : I$=Inkey$
If JM Then Y Mouse=Y Hard(YM)
MK=Mouse Key
If I$=" " or Fire(1)<>0 Then MK=1
MPOS=(YM-120)/16
If I$=Cdown$ Then MPOS=Min(MPOS+1,6) : YM=MPOS*16+128 : OYM=YM : TIM=1
If I$=Cup$ Then MPOS=Max(MPOS-1,DISA*2) : YM=MPOS*16+128 : OYM=YM : TIM=1
Exit If I$=Chr$(27)
If OYM<>YM
TIM=0 : OYM=YM
Else
If TIM and 1
Y Mouse=Y Hard(YM+Sgn((MPOS*16+128)-YM))
End If
End If
If MK<>0 and OMK=0
If MPOS=0
MUS=1-MUS
If MUS=0
Extension_8_10A8
Else
Extension_8_108E 3
End If
T[128,"Music: "+YN$(MUS)]
End If
If MPOS=1
SOU=1-SOU
T[144,"Sound: "+YN$(SOU)]
End If
If MPOS=2
Add LIQ,1,0 To 2
T[160,"Liquid: "+LIQ$(LIQ)]
End If
If MPOS=3 : PAR=3 : Exit 2 : End If
If MPOS=4 : PAR=2 : Exit 2 : End If
Exit If MPOS=5,2
If MPOS=6 : PAR=1 : Exit 2 : End If
Extension_8_12B2 2,0 To 0,3
End If
OMK=MK
Sprite 0,X Hard(100),Y Hard(YM+2),42
Sprite 1,X Hard(220),Y Hard(YM+2),44
Until TIM>400
Sprite Off
Screen 2 : For A=0 To 7 : Colour A+8,Colour(A) : Next : Screen 0
Fade 1 To 2
For A=0 To 15 : Multi Wait : Next
Loop
Sprite Off
If MUS Then For A=64 To 0 Step -2 : Extension_8_10C6 A : Multi Wait : Next : Extension_8_10A8
Pop Proc[PAR]
ENTERHISC:
For A=15 To 1 Step -1
If SCORE>HISC(A,0) Then RANK=A Else Exit
Next
For A=14 To RANK Step -1
HISC$(A+1)=HISC$(A)
HISC(A+1,0)=HISC(A,0)
HISC(A+1,1)=HISC(A,1)
Next
HISC$(RANK)=Space$(12)
HISC(RANK,0)=SCORE
HISC(RANK,1)=LEVEL
Gosub HISCORE
T[232,"You made it! Enter your name!"]
Extension_8_128A 2
Extension_8_12B2 2,0 To 0,3
Extension_8_1258 : Wait Vbl
Screen 2 : For A=0 To 7 : Colour A+8,$FFF : Next : Screen 0
Fade 2 To 2
POS=1
NAME$=Space$(12)
C=0
Do
Multi Wait
I$=Inkey$
If I$="" Then Inc C Else C=0
Exit If I$=Chr$(13) or C>1500
If I$=Chr$(8) and POS>1 Then Dec POS : Mid$(NAME$,POS,1)=" "
If I$>Chr$(31) and POS<13 Then Mid$(NAME$,POS,1)=I$ : Inc POS
Screen 2
Text 92,104+RANK*8+TB,NAME$
Screen 0
If(Timer and $F)=0 Then Extension_8_12B2 2,0 To 0,3
Loop
If NAME$="" Then NAME$= Extension_8_16A4("MR.ANONYMOUS|* LAZY GUY *|MR. NO NAME!",Rnd(2))
HISC$(RANK)=NAME$
Screen 2 : For A=0 To 7 : Colour A+8,Colour(A) : Next : Screen 0
Fade 1 To 2
For A=0 To 15 : Multi Wait : Next
PAG=1-PAG
SAVHISC
Return
MENUTEXT:
Extension_8_121C 2,0
T[80,"Welcome to Tubes V1.7"]
T[104,"Select option:"]
T[128,"Music: "+YN$(MUS)]
T[144,"Sound: "+YN$(SOU)]
T[160,"Liquid: "+LIQ$(LIQ)]
T[176,"Instructions"]
T[192,"Practice"]
T[208,"Start Game"]
T[224,"Quit Game"]
Return
CREDIZ:
Extension_8_121C 2,0
T[80,"Welcome to Tubes V1.7"]
T[104,"Written by Chris Hodges"]
T[128,"Main graphics by Chris Hodges"]
T[144,"Additional graphics by"]
T[152,"Michael Kleiner"]
T[168,"Music and Sfx by Chris Hodges"]
T[184,"Additional ideas by Michael Kleiner"]
T[192,"Paul Gebauer, Michael Ufer and"]
T[200,"Mathias Mischler"]
T[224,"Enjoy..."]
Return
HISCORE:
Extension_8_121C 2,0
T[80,"Best Tubers"]
T[96," Rank Name Score Level"]
For A=1 To 15
T$= Extension_8_0EC8(A,2)+". "+HISC$(A)+" "+ Extension_8_0EB8(HISC(A,0),5)+" "+ Extension_8_0EB8(HISC(A,1),2)
T[104+A*8,T$]
Next
Return
End Proc
Procedure T3[Y,T$]
XX=160-Text Length(T$)/2
YY=Y+Text Base
Ink 0
Text XX-2,YY,T$
Text XX+2,YY,T$
Text XX,YY-2,T$
Text XX,YY+2,T$
Ink 4
Text XX-1,YY-1,T$ : Text XX+1,YY-1,T$
Text XX-1,YY+1,T$ : Text XX+1,YY+1,T$
Ink 3
Text XX-1,YY,T$
Text XX+1,YY,T$
Text XX,YY-1,T$
Text XX,YY+1,T$
Ink 1 : Text XX,YY,T$
End Proc
Procedure T2[Y,T$]
Text 160-Text Length(T$)/2,Y+Text Base,T$
End Proc
Procedure T[Y,T$]
Screen 2
Text 160-Text Length(T$)/2,Y+TB,T$
Screen 0
End Proc
Procedure GAMEOVER
Shared SCORE,MUS
Screen 2 : For A=0 To 7 : Colour A+8,Colour(A) : Next : Screen 0
Fade 2 To 2
Screen 2
Extension_8_1204 11 : TB=Text Base
Extension_8_121C 2,0
T[128,"Game Over"]
T[160,"Score: "+ Extension_8_0EB8(SCORE,5)]
Screen 2 : Extension_8_1204 10 : TB=Text Base
Extension_8_128A 2
Extension_8_12B2 2,0 To 0,3
If MUS Then Extension_8_109E 3,49
Extension_8_1258 : Wait Vbl
For A=0 To 7 : Colour A+8,$FFF : Next : Screen 0
Fade 1 To 2
For A=1 To 175 : Multi Wait : Next
End Proc
Procedure CHECKSAV
Shared SG,LEVEL
If Exist("Tubes.sav")
Extension_8_0456 "Tubes.sav",17
SEARCHCHUNK[Start(17),"ENVI"]
ADR=Param+8
CTIM=Leek(ADR) : CDAT=Leek(ADR+4) : Add ADR,8
CT= Extension_8_07E0
DTIM=( Extension_8_0830(CT)*60+ Extension_8_083E(CT))-( Extension_8_0830(CTIM)*60+ Extension_8_083E(CTIM))
DDAT=( Extension_8_07CE -CDAT)*1440
If DTIM+DDAT>9
SEARCHCHUNK[Start(17),"MODE"]
MD=Leek(Param+8)
If MD=$100
SEARCHCHUNK[Start(17),"VARS"]
LEVEL=Deek(Param+8)
SG=1
Else
SG=0
End If
Kill "Tubes.Sav"
Else
Screen Open 7,640,17,2,$8000
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
Palette 0,0
Screen Display 7,128,164,320,16
RT=10-(DTIM+DDAT)
If RT<>1
Centre "Sorry, but you must wait"+Str$(RT)+" minutes before you can play again."
Else
Centre "Sorry, but you must wait one minute before you can play again."
End If
Print
Centre "(Press any key to quit or 'Help' to kill saved game)"
Fade 1,0,$FFF : Multi Wait
Repeat
Multi Wait : I$=Inkey$ : SCAN=Scancode
Until I$<>""
Fade 1 : For A=0 To 16 : Multi Wait : Next
Screen Close 7
If SCAN<>95
QUIT
End
Else
Kill "Tubes.Sav"
SG=0 : Erase 17
End If
End If
Else
SG=0
End If
End Proc
Procedure REBUILDGFX
Shared LEVEL
Fade 1 : For A=0 To 15 : Multi Wait : Next
NEWTUBCOL
Cls 0
Screen Copy 1,0,16,320,80 To 0,0,0
Extension_8_1204 10
TB=Text Base
Ink 15,0 : Set Pattern -1
Bar 0,64 To 320,256
Put Block 6,0,64 : Put Block 6,15*16,64
Put Block 7,14*16,64 : Put Block 7,304,64
Put Block 8,0,240 : Put Block 8,15*16,240
Put Block 9,14*16,240 : Put Block 9,304,240
For A=1 To 13
Put Block 3,A*16,64
Put Block 3,A*16,240
If A<4
Put Block 3,A*16+15*16,64
Put Block 3,A*16+15*16,240
End If
Next
For A=5 To 14
Put Block 2,0,A*16
Put Block 2,14*16,A*16
Put Block 2,15*16,A*16
Put Block 2,304,A*16
Next
Limit Mouse X Hard(16),Y Hard(80) To X Hard(14*16-1),Y Hard(15*16-1)
Screen 2
Extension_8_1204 11 : TB=Text Base
Extension_8_121C 2,0
T[128,"Get ready for Level"+Str$(LEVEL)]
Screen 2 : Extension_8_1204 10 : TB=Text Base
Extension_8_128A 2
Extension_8_12B2 2,0 To 0,3
Extension_8_1258 : Wait Vbl
For A=0 To 7 : Colour A+8,$FFF : Next : Screen 0
Fade 1 To 2
For A=1 To 50 : Multi Wait : Next
Screen 2 : For A=0 To 7 : Colour A+8,Colour(A) : Next : Screen 0
Fade 1 To 2
For A=1 To 32 : Multi Wait : Next
Extension_8_121C 0,3
Fade 2 To 1
End Proc
Procedure REBUILDGFXSAVEGAME[SGAD]
Shared NUMTUBES,LEVEL,SCORE,TIME,LEVDIF,MUS,SOU
Shared WX,WY,SX,SY
Shared DISA,LIQ,CURVSAM,CURVFREQ
Fade 1 : For A=0 To 15 : Multi Wait : Next
Cls 0
Screen Copy 1,0,16,320,80 To 0,0,0
Extension_8_1204 10
TB=Text Base
Ink 15,0 : Set Pattern -1
Bar 0,64 To 320,256
Put Block 6,0,64 : Put Block 6,15*16,64
Put Block 7,14*16,64 : Put Block 7,304,64
Put Block 8,0,240 : Put Block 8,15*16,240
Put Block 9,14*16,240 : Put Block 9,304,240
For A=1 To 13
Put Block 3,A*16,64
Put Block 3,A*16,240
If A<4
Put Block 3,A*16+15*16,64
Put Block 3,A*16+15*16,240
End If
Next
For A=5 To 14
Put Block 2,0,A*16
Put Block 2,14*16,A*16
Put Block 2,15*16,A*16
Put Block 2,304,A*16
Next
Limit Mouse X Hard(16),Y Hard(80) To X Hard(14*16-1),Y Hard(15*16-1)
SEARCHCHUNK[SGAD,"ENVI"]
ADR=Param+16
MUS= Extension_8_0BE4(ADR) : SOU= Extension_8_0BE4(ADR+2) : LIQ= Extension_8_0BE4(ADR+4) : Add ADR,6
If DISA : MUS=0 : SOU=0 : End If
CURVSAM=Deek(ADR) : CURVFREQ=Leek(ADR+2) : Add ADR,6
X Mouse=Deek(ADR) : Y Mouse=Deek(ADR+2) : Add ADR,4
Screen 2
For A=0 To 31
Colour A,Deek(ADR) : Add ADR,2
Next
Screen 1 : Get Palette 2
Screen 0
SEARCHCHUNK[SGAD,"RAND"]
ADR=Param
Extension_8_026E ADR+8,ADR+8+Leek(ADR+4) To 16
SEARCHCHUNK[SGAD,"GMAP"]
ADR=Param+8
For Y=0 To 9
For X=0 To 12
F(X,Y)= Extension_8_0BE4(ADR) : Add ADR,2
Put Block Abs(F(X,Y))+1,X*16+16,Y*16+80
Next
Next
SEARCHCHUNK[SGAD,"VARS"]
ADR=Param+8
LEVEL=Deek(ADR) : SCORE=Deek(ADR+2) : NUMTUBES=Deek(ADR+4) : Add ADR,6
REPART=Deek(ADR) : LEVDIF=Deek(ADR+2) : TIME=Deek(ADR+4) : Add ADR,6
RETIME=Deek(ADR) : ST=Start(16)+Leek(ADR+2) : Add ADR,6
HOM=Deek(ADR) : WX= Extension_8_0BE4(ADR+2) : WY= Extension_8_0BE4(ADR+4) : SX= Extension_8_0BE4(ADR+6) : SY= Extension_8_0BE4(ADR+8) : Add ADR,10
TIE=Deek(ADR) : TIE2=Deek(ADR+2) : TIE3=Deek(ADR+4) : TIE4=Deek(ADR+6)
Put Block HOM+1,SX*16+16,SY*16+80
Screen 2
Extension_8_1204 11 : TB=Text Base
Extension_8_121C 2,0
T[128,"Restarting Level"+Str$(LEVEL)]
Screen 2 : Extension_8_1204 10 : TB=Text Base
Extension_8_128A 2
Extension_8_12B2 2,0 To 0,3
Extension_8_1258 : Wait Vbl
For A=0 To 7 : Colour A+8,$FFF : Next : Screen 0
Fade 1 To 2
For A=1 To 50 : Multi Wait : Next
Screen 2 : For A=0 To 7 : Colour A+8,Colour(A) : Next : Screen 0
Fade 1 To 2
For A=1 To 32 : Multi Wait : Next
Extension_8_121C 0,3
Fade 2 To 1
End Proc
Procedure SHUFFLEBONUSGAME
Shared NUMTUBES,SCORE,LEVEL,TIME,MUS,SOU,DISA
Shared WX,WY,SX,SY
NEWRND[13*10]
NUMTUBES=1
Fade 1 : For A=0 To 15 : Multi Wait : Next
NEWTUBCOL
Cls 0
Screen Copy 1,0,16,320,80 To 0,0,0
Extension_8_1204 10
TB=Text Base
Ink 15,0 : Set Pattern -1
Bar 0,64 To 320,256
Put Block 6,0,64 : Put Block 6,15*16,64
Put Block 7,14*16,64 : Put Block 7,304,64
Put Block 8,0,240 : Put Block 8,15*16,240
Put Block 9,14*16,240 : Put Block 9,304,240
For A=1 To 13
Put Block 3,A*16,64
Put Block 3,A*16,240
If A<4
Put Block 3,A*16+15*16,64
Put Block 3,A*16+15*16,240
End If
Next
For A=5 To 14
Put Block 2,0,A*16
Put Block 2,14*16,A*16
Put Block 2,15*16,A*16
Put Block 2,304,A*16
Next
ST=Start(16)
For Y=0 To 9
For X=0 To 12
F(X,Y)=Peek(ST) : Inc ST
Put Block F(X,Y)+1,X*16+16,Y*16+80
Next
Next
Limit Mouse X Hard(-4),Y Hard(80) To X Hard(279),Y Hard(15*16-1)
Screen 2
Extension_8_1204 11 : TB=Text Base
Extension_8_121C 2,0
T[112,"Get ready for"]
T[144,"Bonus Level"]
Screen 2 : Extension_8_1204 10 : TB=Text Base
Extension_8_128A 2
Extension_8_12B2 2,0 To 0,3
Extension_8_1258 : Wait Vbl
Extension_8_1486 0,2
For A=0 To 7 : Colour A+8,$FFF : Next
For A=0 To 7 : Colour A,0 : Next : Screen 0
Fade 1 To 2
For A=1 To 50 : Multi Wait : Next
Extension_8_149E 0,2
Screen 1
Colour 17,0 : Colour 18,$EE0 : Colour 19,$E70
Colour 20,$A50 : Colour 21,$530
Extension_8_1486 0,1
For A=0 To 7 : Colour A+8,Colour(A) : Next
Screen 0
Fade 2 To 1
For A=1 To 32 : Multi Wait : Next
Extension_8_149E 0,1
Extension_8_121C 0,3 : Multi Wait
Get Palette 1
If MUS
Extension_8_10C6 64
Extension_8_109E 3,19
End If
SX=Rnd(10)+1
SY=Rnd(7)+1
HOM=Rnd(3)+9
Ink 15,0 : Set Pattern -1 : Bar SX*16+16,SY*16+80 To SX*16+31,SY*16+95
Put Block HOM+1,SX*16+16,SY*16+80
F(SX,SY)=HOM
If HOM=9 Then WX=0 : WY=1
If HOM=10 Then WX=0 : WY=-1
If HOM=11 Then WX=1 : WY=0
If HOM=12 Then WX=-1 : WY=0
Gr Writing 0
Ink 1,0
Text 260,80+TB,"Bonus"
Text 260,88+TB,"Level"
Text 260,104+TB,"Score"
Text 260,112+TB, Extension_8_0EB8(SCORE,5)
Text 260,128+TB,"Time:"
Timer=0
Gr Writing 1
Do
Clear Key
Repeat
T=TIME-(Timer/50)
If OT<>T
T1=T/60 : T2=T mod 60
DUMMY$=Str$(T1)+Str$(T2)
OT=T
Ink 1,0 : Text 260,136+TB, Extension_8_0EB8(T1,2)+":"+ Extension_8_0EB8(T2,2)
Exit If T=0,2
If SOU
If T>10
Extension_8_13EA Extension_8_04F8(VO),16 : Add VO,1,MUS*2 To 3
Else
Extension_8_13F4 Extension_8_04F8(VO),14,8000 : Add VO,1,MUS*2 To 3
End If
End If
End If
Multi Wait
MK=Mouse Key
I$=Lower$(Inkey$)
Gosub MOUSPOS
If I$="s" and DISA=0
SOU=1-SOU
If SOU=0
Extension_8_1400 15
End If
End If
If I$="m" and DISA=0
MUS=1-MUS
If MUS=0
Extension_8_10A8
Else
Extension_8_109E 3,19
End If
End If
If I$="p"
Fade 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
TT=Timer
If MUS
P=Peek( Extension_8_1386 -12)
Extension_8_109E 3,50
End If
Repeat
Multi Wait
MK=Mouse Key : Gosub MOUSPOS
Sprite 0,X Hard(XM*16+16),Y Hard(YM*16+80),TIE+36
Until Inkey$<>"" or MK>0 or Fire(1)<>0
Repeat
Multi Wait
MK=Mouse Key
Until MK=0 or Fire(1)<>0
If MUS
Extension_8_10A8 : Extension_8_109E 3,P
End If
Fade 1 To 1
Timer=TT
End If
Exit If I$=Chr$(27),2
Sprite 0,X Hard(XM*16+16),Y Hard(YM*16+80),TIE+36
Until MK
If(TIE=0 and MK=1) or(TIE=2 and MK=2)
If SOU
Extension_8_13EA Extension_8_04F8(VO),24 : Add VO,1,MUS*2 To 3
End If
Screen Copy 0,XM*16+16,224,XM*16+32,240 To 1,304,0
For A=0 To 15
Screen Copy 0,XM*16+16,80,XM*16+32,239 To 0,XM*16+16,81
Screen Copy 1,304,15-A,320,16-A To 0,XM*16+16,80
If A<>15 : Multi Wait : End If
Next
AA=F(XM,9)
For A=8 To 0 Step -1 : F(XM,A+1)=F(XM,A) : Next
F(XM,0)=AA
If XM=SX : Add SY,1,0 To 9 : End If
End If
If(TIE=0 and MK=2) or(TIE=2 and MK=1)
If SOU
Extension_8_13EA Extension_8_04F8(VO),24 : Add VO,1,MUS*2 To 3
End If
Screen Copy 0,XM*16+16,80,XM*16+32,96 To 1,304,0
For A=0 To 15
Screen Copy 0,XM*16+16,81,XM*16+32,240 To 0,XM*16+16,80
Screen Copy 1,304,A,320,A+1 To 0,XM*16+16,239
If A<>15 : Multi Wait : End If
Next
AA=F(XM,0)
For A=1 To 9 : F(XM,A-1)=F(XM,A) : Next
F(XM,9)=AA
If XM=SX : Add SY,-1,0 To 9 : End If
End If
If(TIE=1 and MK=1) or(TIE=3 and MK=2)
If SOU
Extension_8_13EA Extension_8_04F8(VO),24 : Add VO,1,MUS*2 To 3
End If
Screen Copy 0,16,YM*16+80,32,YM*16+96 To 1,304,0
For A=0 To 15
Screen Copy 0,17,YM*16+80,224,YM*16+96 To 0,16,YM*16+80
Screen Copy 1,304+A,0,305+A,16 To 0,223,YM*16+80
If A<>15 : Multi Wait : End If
Next
AA=F(0,YM)
For A=0 To 11 : F(A,YM)=F(A+1,YM) : Next
F(12,YM)=AA
If YM=SY : Add SX,-1,0 To 12 : End If
End If
If(TIE=1 and MK=2) or(TIE=3 and MK=1)
If SOU
Extension_8_13EA Extension_8_04F8(VO),24 : Add VO,1,MUS*2 To 3
End If
Screen Copy 0,208,YM*16+80,224,YM*16+96 To 1,304,0
For A=0 To 15
Screen Copy 0,16,YM*16+80,223,YM*16+96 To 0,17,YM*16+80
Screen Copy 1,319-A,0,320-A,16 To 0,16,YM*16+80
If A<>15 : Multi Wait : End If
Next
AA=F(12,YM)
For A=12 To 1 Step -1 : F(A,YM)=F(A-1,YM) : Next
F(0,YM)=AA
If YM=SY : Add SX,1,0 To 12 : End If
End If
Loop
Sprite Off
TIME=0 : If MUS Then Extension_8_10A8
Pop Proc
MOUSPOS:
X=X Screen(X Mouse)
If I$=Cleft$ Then X Mouse=X Hard((X+270) mod 276)
If I$=Cright$ Then X Mouse=X Hard((X+6) mod 276)
If Jleft(1) Then X Mouse=X Hard((X+275) mod 276)
If Jright(1) Then X Mouse=X Hard((X+1) mod 276)
If I$=Cup$ or Jup(1)<>0 Then MK=1
If I$=Cdown$ or Jdown(1)<>0 Then MK=2
If X<0 Then X Mouse=X Hard(X)+276
If X>275 Then X Mouse=X Hard(X)-276
X=X Screen(X Mouse)
MP=(X Screen(X Mouse))/6
If MP<13 Then XM=MP : YM=-1 : TIE=0
If MP>12 and MP<23 Then XM=13 : YM=MP-13 : TIE=1
If MP>22 and MP<36 Then XM=35-MP : YM=10 : TIE=2
If MP>35 Then XM=-1 : YM=45-MP : TIE=3
Return
End Proc
Procedure TETRISBONUS
Shared NUMTUBES,SCORE,LEVEL,TIME,MUS,SOU,DISA
Shared WX,WY,SX,SY
On Error Goto ERRHANDLING
NEWRND[NUMTUBES]
Fade 1 : For A=0 To 15 : Multi Wait : Next
NEWTUBCOL
Cls 0
Screen Copy 1,0,16,320,80 To 0,0,0
Extension_8_1204 10
TB=Text Base
Ink 15,0 : Set Pattern -1
Bar 0,64 To 320,256
Put Block 6,0,64 : Put Block 6,15*16,64
Put Block 7,14*16,64 : Put Block 7,304,64
Put Block 8,0,240 : Put Block 8,15*16,240
Put Block 9,14*16,240 : Put Block 9,304,240
For A=1 To 13
Put Block 3,A*16,64
Put Block 3,A*16,240
If A<4
Put Block 3,A*16+15*16,64
Put Block 3,A*16+15*16,240
End If
Next
For A=5 To 14
Put Block 2,0,A*16
Put Block 2,14*16,A*16
Put Block 2,15*16,A*16
Put Block 2,304,A*16
Next
For Y=0 To 9
For X=0 To 12
F(X,Y)=-(Y=9)*10
Next
Next
SY=9 : HOM=10
For SX=0 To 12
Put Block HOM+1,SX*16+16,SY*16+80
Next
Gr Writing 0
Ink 1,0
Text 260,80+TB,"Bonus"
Text 260,88+TB,"Level"
Text 260,104+TB,"Score"
Text 260,112+TB, Extension_8_0EB8(SCORE,5)
Text 260,128+TB,"Time:"
Limit Mouse X Hard(16),Y Hard(80) To X Hard(14*16-1),Y Hard(15*16-1)
Screen 2
Extension_8_1204 11 : TB=Text Base
Extension_8_121C 2,0
T[112,"Get ready for"]
T[144,"Bonus Level"]
Screen 2 : Extension_8_1204 10 : TB=Text Base
Extension_8_128A 2
Extension_8_12B2 2,0 To 0,3
Extension_8_1258 : Wait Vbl
Extension_8_1486 0,2
For A=0 To 7 : Colour A+8,$FFF : Next
For A=0 To 7 : Colour A,0 : Next : Screen 0
Fade 1 To 2
For A=1 To 50 : Multi Wait : Next
Extension_8_149E 0,2
Extension_8_1486 0,1
Screen 1 : For A=0 To 7 : Colour A+8,Colour(A) : Next
Screen 0
Fade 2 To 1
For A=1 To 32 : Multi Wait : Next
Extension_8_149E 0,1
Extension_8_121C 0,3 : Multi Wait
For A=0 To 7 : Colour A+8,Colour(A) : Next
For SX=0 To 12
Put Block HOM+1,SX*16+16,SY*16+80
Next
Fade 1 To 1 : For A=1 To 16 : Multi Wait : Next
If MUS
Extension_8_10C6 64
Extension_8_109E 3,19
End If
ST=Start(16)
TIE2=Peek(ST) : Inc ST
TIE3=Peek(ST) : Inc ST
TIE4=Peek(ST) : Inc ST
Timer=0
VO=2
Gr Writing 1
For PARTS=1 To NUMTUBES
Ink 1,0 : Text 260,160+TB, Extension_8_0EB8(Min(PARTS,99),2)+"/"+ Extension_8_0EB8(Min(NUMTUBES,99),2)
TIE=TIE2 : TIE2=TIE3 : TIE3=TIE4
If PARTS<NUMTUBES-2 Then TIE4=Peek(ST) : Inc ST Else TIE4=0
Ink 15,0 : Set Pattern -1 : Bar 256,224 To 303,239
If LEVEL<15 Then Put Block TIE2+1,256,224 Else Put Block 1,256,224
If LEVEL<10 Then Put Block TIE3+1,272,224 Else Put Block 1,272,224
If LEVEL<5 Then Put Block TIE4+1,288,224 Else Put Block 1,288,224
TX=6*16 : TY=-16
X Mouse=X Hard(TX+24)
DTRIGGER=0
Do
Multi Wait
T=TIME-(Timer/50)
If OT<>T
T1=T/60 : T2=T mod 60
DUMMY$=Str$(T1)+Str$(T2)
OT=T
Ink 1,0 : Text 260,136+TB, Extension_8_0EB8(T1,2)+":"+ Extension_8_0EB8(T2,2)
Exit If T=0,2
If SOU
If T>10
Extension_8_13EA Extension_8_04F8(VO),16 : Add VO,1,MUS*2 To 3
Else
Extension_8_13F4 Extension_8_04F8(VO),14,8000 : Add VO,1,MUS*2 To 3
End If
End If
End If
D=Jleft(1)-Jright(1)
If D<>0 Then X Mouse=X Mouse+D*2
XM=(X Screen(X Mouse)-16)/16
MK=Mouse Key
Exit If MK=2,2
I$=Lower$(Inkey$)
If I$=Cleft$ and XM>0 Then X Mouse=X Hard(XM*16+8) : Dec XM : DTRIGGER=0
If I$=Cright$ and XM<12 Then X Mouse=X Hard(XM*16+40) : Inc XM : DTRIGGER=0
If I$=" " or I$=Cdown$ Then DTRIGGER=-1
If I$="s" and DISA=0
SOU=1-SOU
If SOU=0
Extension_8_1400 15
End If
End If
If I$="m" and DISA=0
MUS=1-MUS
If MUS=0
Extension_8_10A8
Else
Extension_8_109E 3,19
End If
End If
If I$="p"
Fade 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
TT=Timer
If MUS
P=Peek( Extension_8_1386 -12)
Extension_8_109E 3,50
End If
Repeat
Multi Wait
Until Inkey$<>"" or MK>0 or Fire(1)<>0
Repeat
Multi Wait
MK=Mouse Key
Until MK=0 or Fire(1)<>0
If MUS
Extension_8_10A8 : Extension_8_109E 3,P
End If
Fade 1 To 1
Timer=TT
End If
Exit If I$=Chr$(27),2
BX=TX/16 : BY=(TY-80)/16
If BY>-2
Exit If F(BX,BY+1)<>0
End If
D=Sgn(XM*16-TX)
ACC=(MK=1) or Fire(1) or Jdown(1) or DTRIGGER
If ACC and TY>0 Then TY=(TY and $FFC)+4 : TX=TX and $FFC
If D and BY>-2
If F(Max(Min(BX+D,12),0),BY+1)=0
Add TX,D*(2-ACC*2)
If F(BX,BY+2)=0
Inc TY
End If
Else
Add TX,Sgn(BX*16-TX)
Inc TY
End If
Else
Inc TY
Add TX,D*(2-ACC*2)
End If
Sprite 0,X Hard(TX+16),Y Hard(TY),TIE+1
Sprite 2,X Hard(XM*16+16),Y Hard(TY),TIE+1
Loop
Exit If BY=-1
F(BX,BY)=TIE : Put Block TIE+1,BX*16+16,BY*16+80
If SOU
Extension_8_13F4 Extension_8_04F8(VO),15,10000 : Add VO,1,MUS*2 To 3
End If
Next
Sprite Off
If MUS Then Extension_8_10A8
For A=0 To 12
TIME=0 : WX=0 : WY=-1 : SX=A : SY=9 : HOM=10
WATERGO
For Y=0 To 9
For X=0 To 12
F(X,Y)=Abs(F(X,Y))
Next
Next
Next
Pop Proc
ERRHANDLING:
Resume Next
End Proc
Procedure SETTUBES[SGAD]
Shared NUMTUBES,LEVEL,SCORE,TIME,LEVDIF,MUS,SOU
Shared WX,WY,SX,SY
On Error Goto ERRHANDLING
If SGAD
SEARCHCHUNK[SGAD,"VARS"]
ADR=Param+8
LEVEL=Deek(ADR) : SCORE=Deek(ADR+2) : NUMTUBES=Deek(ADR+4) : Add ADR,6
REPART=Deek(ADR) : LEVDIF=Deek(ADR+2) : TIME=Deek(ADR+4) : Add ADR,6
RETIME=Deek(ADR) : ST=Start(16)+Leek(ADR+2) : Add ADR,6
HOM=Deek(ADR) : WX= Extension_8_0BE4(ADR+2) : WY= Extension_8_0BE4(ADR+4) : SX= Extension_8_0BE4(ADR+6) : SY= Extension_8_0BE4(ADR+8) : Add ADR,10
TIE=Deek(ADR) : TIE2=Deek(ADR+2) : TIE3=Deek(ADR+4) : TIE4=Deek(ADR+6)
Put Block HOM+1,SX*16+16,SY*16+80
Else
REPART=1
RETIME=TIME
NEWRND[NUMTUBES]
For Y=0 To 9
For X=0 To 12
F(X,Y)=0
Next
Next
SX=Rnd(10)+1
SY=Rnd(7)+1
HOM=Rnd(3)+9
Put Block HOM+1,SX*16+16,SY*16+80
F(SX,SY)=HOM
If LEVEL>2
For A=1 To Min(LEVEL/2,10)
Repeat
X=Rnd(10)+1
Y=Rnd(7)+1
Until F(X,Y)=0 and F(X-1,Y)=0 and F(X+1,Y)=0 and F(X,Y-1)=0 and F(X,Y+1)=0
F=Rnd(7)+1
Put Block F+1,X*16+16,Y*16+80
F(X,Y)=-F
Next
End If
If HOM=9 : WX=0 : WY=1 : End If
If HOM=10 : WX=0 : WY=-1 : End If
If HOM=11 : WX=1 : WY=0 : End If
If HOM=12 : WX=-1 : WY=0 : End If
ST=Start(16)
TIE2=Peek(ST) : Inc ST
TIE3=Peek(ST) : Inc ST
TIE4=Peek(ST) : Inc ST
End If
Gr Writing 0
Ink 1,0
Text 260,80+TB,"Level"
Text 272,88+TB, Extension_8_0EB8(LEVEL,2)
Text 260,104+TB,"Score"
Text 260,112+TB, Extension_8_0EB8(SCORE,5)
Text 260,128+TB,"Time:"
Text 260,152+TB,"Tubes"
Text 260,216+TB,"Next:"
If MUS
Extension_8_10C6 64
Extension_8_109E 3,19
End If
Timer=(TIME-RETIME)*50
For PARTS=REPART To NUMTUBES
Gr Writing 1
If SGAD=0 or PARTS<>REPART
TIE=TIE2
TIE2=TIE3
TIE3=TIE4
If PARTS<NUMTUBES-2
TIE4=Peek(ST) : Inc ST
Else
TIE4=0
End If
End If
Ink 1,0 : Text 260,160+TB, Extension_8_0EB8(Min(PARTS,99),2)+"/"+ Extension_8_0EB8(Min(NUMTUBES,99),2)
Ink 15,0 : Set Pattern -1 : Bar 256,224 To 303,239
If LEVEL<15 Then Put Block TIE2+1,256,224 Else Put Block 1,256,224
If LEVEL<10 Then Put Block TIE3+1,272,224 Else Put Block 1,272,224
If LEVEL<5 Then Put Block TIE4+1,288,224 Else Put Block 1,288,224
JOOLD=0
Repeat
T=TIME-(Timer/50)
If OT<>T
T1=T/60 : T2=T mod 60
DUMMY$=Str$(T1)+Str$(T2)
OT=T
Ink 1,0 : Text 260,136+TB, Extension_8_0EB8(T1,2)+":"+ Extension_8_0EB8(T2,2)
Exit If T=0,2
If T>10
If SOU
Extension_8_13EA Extension_8_04F8(VO),16 : Add VO,1,MUS*2 To 3
End If
Else
If T=10 and MUS=1
Extension_8_109E 3,28
End If
If SOU
Extension_8_13F4 8,14,8000 : VO=MUS*2
End If
End If
End If
Multi Wait
MK=Mouse Key
XM=(X Screen(X Mouse)-16)/16
YM=(Y Screen(Y Mouse)-80)/16
I$=Lower$(Inkey$) : SCAN=Scancode
If I$="s" and DISA=0
SOU=1-SOU
If SOU=0
Extension_8_1400 15
End If
End If
If I$="m" and DISA=0
MUS=1-MUS
If MUS=0
Extension_8_10A8
Else
Extension_8_109E 3,19
End If
End If
If Joy(1)<>JOOLD or I$<>""
If I$=Cleft$ or Jleft(1) : X Mouse=X Hard(XM*16+8) : End If
If I$=Cright$ or Jright(1) : X Mouse=X Hard(XM*16+40) : End If
If I$=Cup$ or Jup(1) : Y Mouse=Y Hard(YM*16+72) : End If
If I$=Cdown$ or Jdown(1) : Y Mouse=Y Hard(YM*16+104) : End If
If I$=" " or Fire(1) : MK=1 : End If
JOOLD=Joy(1)
End If
If SCAN=70 Then MK=2
If I$="p"
TT=Timer
Fade 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
If MUS
P=Peek( Extension_8_1386 -12)
Extension_8_109E 3,50
End If
Repeat
Multi Wait
MK=Mouse Key
XM=(X Screen(X Mouse)-16)/16
YM=(Y Screen(Y Mouse)-80)/16
Sprite 0,X Hard(XM*16+16),Y Hard(YM*16+80),TIE+1
Until Inkey$<>"" or MK>0 or Fire(1)<>0
Repeat
Multi Wait
MK=Mouse Key
Until MK=0 and Fire(1)=0
If MUS
Extension_8_10A8 : Extension_8_109E 3,P
End If
Fade 1 To 1
Timer=TT
End If
Exit If I$=Chr$(27),2
Sprite 0,X Hard(XM*16+16),Y Hard(YM*16+80),TIE+1
If F(XM,YM)<>0 and MK=1
If SOU
Extension_8_13F4 Extension_8_04F8(VO),4,9000 : Add VO,1,MUS*2 To 3
End If
Repeat
Multi Wait
MK=Mouse Key
Until MK=0 and Fire(1)=0
End If
If MK=2 and T>15
If F(XM,YM)<>0
If Abs(F(XM,YM))<9
If SOU
Extension_8_13F4 Extension_8_04F8(VO),23,9000 : Add VO,1,MUS*2 To 3
End If
Sprite Off 0
Colour 29,$FF0 : Colour 30,$D70 : Colour 31,$C00
For A=0 To 21
Sprite 6,X Hard(XM*16+16),Y Hard(YM*16+80),14+A
If A=13
Ink 15,0 : Set Pattern -1 : Bar XM*16+16,YM*16+80 To XM*16+31,YM*16+95
Put Block 1,XM*16+16,YM*16+80
End If
Multi Wait
Next
Sprite Off 6
F(XM,YM)=0
Timer=Timer+250
Else
If SOU
Extension_8_13F4 Extension_8_04F8(VO),11,13000 : Add VO,1,MUS*2 To 3
End If
End If
End If
Repeat
Multi Wait
MK=Mouse Key
Until MK=0 and Fire(1)=0
End If
If SCAN=95 and LEVEL<>0 Then Gosub SAVGAM
Until MK=1
If SOU
Extension_8_13F4 Extension_8_04F8(VO),15,10000 : Add VO,1,MUS*2 To 3
End If
F(XM,YM)=TIE
Put Block TIE+1,XM*16+16,YM*16+80
Sprite Off
Repeat
Multi Wait
MK=Mouse Key
Until MK=0 and Fire(1)=0
Next
Sprite Off
TIME=T : If MUS Then Extension_8_10A8
Pop Proc
SAVGAM:
Sprite Off
TT=Timer
Screen Open 7,640,17,2,$8000
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
Palette 0,0
Screen Display 7,128,164,320,16
Centre "Do you really want to save the current game? (Y/N)" : Print
Centre "(The game will be quitted and you cannot play on for 10 minutes!)"
Fade 1,0,$FFF : Multi Wait
Repeat
Multi Wait : I$=Lower$(Inkey$)
Until I$="y" or I$="j" or I$="n"
Fade 1 : For A=0 To 16 : Multi Wait : Next
Screen Close 7
If I$="y" or I$="j"
HED$=HED$+ Extension_8_08C4(LEVEL)+ Extension_8_08C4(SCORE)+ Extension_8_08C4(NUMTUBES)+ Extension_8_08C4(PARTS)
HED$=HED$+ Extension_8_08C4(LEVDIF)+ Extension_8_08C4(TIME)+ Extension_8_08C4(TIME-(TT/50))
HED$=HED$+ Extension_8_08D2(ST-Start(16))
HED$=HED$+ Extension_8_08C4(HOM)+ Extension_8_08C4(WX)+ Extension_8_08C4(WY)+ Extension_8_08C4(SX)+ Extension_8_08C4(SY)
HED$=HED$+ Extension_8_08C4(TIE)+ Extension_8_08C4(TIE2)+ Extension_8_08C4(TIE3)+ Extension_8_08C4(TIE4)
SAVGAME[$100,HED$,%11]
Sprite Off
If MUS : Extension_8_10A8 : End If
QUIT
End
End If
Timer=TT
Return
ERRHANDLING:
Resume Next
End Proc
Procedure SEARCHCHUNK[SA,ID$]
If Leek(SA)<> Extension_8_0998("FORM") Then Stop
If Leek(SA+8)<> Extension_8_0998("SAVE") Then Stop
EA=SA+Leek(SA+4)+8 : Add SA,12
AD=0
While SA<=EA
LH=Leek(SA+4)
If Leek(SA)= Extension_8_0998(ID$) Then AD=SA : Exit
Add SA,LH+8
Wend
If AD=0 Then Stop
End Proc[AD]
Procedure SAVGAME[MO,HEAD$,ARI]
Shared MUS,SOU,LIQ,CURVSAM,CURVFREQ
Open Out 1,"Tubes.Sav"
Print #1,"FORM"+ Extension_8_08D2(0)+"SAVE";
A$="ENVI"+ Extension_8_08D2(12*2+32*2)
A$=A$+ Extension_8_08D2( Extension_8_07E0 )+ Extension_8_08D2( Extension_8_07CE )
A$=A$+ Extension_8_08C4(MUS)+ Extension_8_08C4(SOU)+ Extension_8_08C4(LIQ)+ Extension_8_08C4(CURVSAM)+ Extension_8_08D2(CURVFREQ)
A$=A$+ Extension_8_08C4(X Mouse)+ Extension_8_08C4(Y Mouse)
For A=0 To 31
A$=A$+ Extension_8_08C4(Colour(A))
Next
Print #1,A$;
Print #1,"MODE"+ Extension_8_08D2(4)+ Extension_8_08D2(MO);
Print #1,"VARS"+ Extension_8_08D2(Len(HEAD$))+HEAD$;
If ARI and 1
A$="GMAP"+ Extension_8_08D2(13*10*2)
For Y=0 To 9
For X=0 To 12
A$=A$+ Extension_8_08C4(F(X,Y))
Next
Next
Print #1,A$;
End If
If ARI and 2
A$="RAND"+ Extension_8_08D2(Length(16))+Peek$(Start(16),Length(16))
Print #1,A$;
End If
L=Lof(1)
Pof(1)=4 : Print #1, Extension_8_08D2(L-8);
Close 1
End Proc
Procedure CLEANFIELDBONUS
Shared SCORE,SOU,MUS,DISA
NUMTUBES=0
For Y=0 To 9
For X=0 To 12
If F(X,Y)>0 Then Inc NUMTUBES
Next
Next
If NUMTUBES=0 Then Pop Proc
Palette ,,,,,,,,,,,,,,,,,,,,,,,,$AAA,$333,$400,$EB0,$E80,$B60,$840,$A20
For A=0 To 7 : Colour A+16,Colour(A) : Next
BAGDIR=Rnd(3)*4 : JOOLD=0
Repeat
Multi Wait : I$=Inkey$
XM=(X Screen(X Mouse)-16)/16
YM=(Y Screen(Y Mouse)-80)/16
MK=Mouse Key
If Joy(1)<>JOOLD or I$<>""
If I$=Cleft$ or Jleft(1) : X Mouse=X Hard(XM*16+8) : End If
If I$=Cright$ or Jright(1) : X Mouse=X Hard(XM*16+40) : End If
If I$=Cup$ or Jup(1) : Y Mouse=Y Hard(YM*16+72) : End If
If I$=Cdown$ or Jdown(1) : Y Mouse=Y Hard(YM*16+104) : End If
If I$=" " or Fire(1) : MK=1 : End If
JOOLD=Joy(1)
End If
If I$=Chr$(27) Then Sprite Off : Pop Proc
Sprite 6,X Hard(XM*16+16),Y Hard(YM*16+80),45+BAGDIR
If F(XM,YM)<>0 and MK<>0
If SOU
Extension_8_13F4 Extension_8_04F8(VO),4,9000 : Add VO,1,MUS*2 To 3
End If
Repeat
Multi Wait
MK=Mouse Key
Until MK=0
End If
Until MK
If SOU
Extension_8_13F4 Extension_8_04F8(VO),15,10000 : Add VO,1,MUS*2 To 3
End If
Repeat
Multi Wait
MK=Mouse Key
Until MK=0
BX=XM : BY=YM
Limit Mouse X Hard(0),Y Hard(0) To X Hard(47),Y Hard(47)
X Mouse=X Hard(24) : Y Mouse=Y Hard(24) : VO=3 : EVOL=64
If SOU
Extension_8_13F4 1,-25,10000 : Extension_8_147C 1,0
Extension_8_13F4 8,-25,8000 : Extension_8_147C 8,EVOL
End If
Do
Clear Key
Repeat
Multi Wait
If SOU
EVOL=Max(EVOL-1,16) : Extension_8_147C 8,EVOL : Extension_8_161E 8,8000-(64-EVOL)*32
End If
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse)
MK=Mouse Key : I$=Inkey$
If I$=Cleft$ or Jleft(1) : X Mouse=X Hard(0) : Y Mouse=Y Hard(24) : MK=1 : End If
If I$=Cright$ or Jright(1) : X Mouse=X Hard(47) : Y Mouse=Y Hard(24) : MK=1 : End If
If I$=Cup$ or Jup(1) : Y Mouse=Y Hard(0) : X Mouse=X Hard(24) : MK=1 : End If
If I$=Cdown$ or Jdown(1) : Y Mouse=Y Hard(47) : X Mouse=X Hard(24) : MK=1 : End If
If I$=" " or Fire(1) : MK=1 : End If
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse)
Exit If I$=Chr$(27) or MK=2 or NUMTUBES=0,2
Gosub GEDDIRECTION
Sprite 6,X Hard(BX*16+16),Y Hard(BY*16+80),45+BAGDIR
Sprite 0,X Hard(BX*16+XM),Y Hard(BY*16+YM+64),TIE
Until MK=1 and TIE<>40
If TARDIR<>BAGDIR
If SOU
EVOL=64 : Extension_8_147C 8,EVOL : Extension_8_161E 8,8000-(64-EVOL)*32
End If
D=Abs(TARDIR-BAGDIR)
If D<8 : D=Sgn(TARDIR-BAGDIR) : Else D=Sgn(BAGDIR-TARDIR) : End If
Repeat
Add BAGDIR,D,0 To 15
For A=0 To 3
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse)
Sprite 6,X Hard(BX*16+16),Y Hard(BY*16+80),45+BAGDIR
Sprite 0,X Hard(BX*16+XM),Y Hard(BY*16+YM+64),TIE
Multi Wait
Next
Until TARDIR=BAGDIR
End If
If BX+TX<0 or BX+TX>12 or BY+TY<0 or BY+TY>9
If SOU
Extension_8_13F4 4,13,9000
End If
Repeat
Multi Wait
MK=Mouse Key
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse)
Sprite 0,X Hard(BX*16+XM),Y Hard(BY*16+YM+64),TIE
If SOU
EVOL=Max(EVOL-1,16) : Extension_8_147C 8,EVOL : Extension_8_161E 8,8000-(64-EVOL)*32
End If
Until MK=0 and Fire(1)=0 and Joy(1)=0
Else
If F(BX+TX,BY+TY)=0
If SOU
EVOL=64 : Extension_8_147C 8,EVOL : Extension_8_161E 8,8000-(64-EVOL)*32
End If
X=0 : Y=0
For A=0 To 15
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse)
Add X,TX : Add Y,TY
Sprite 6,X Hard(BX*16+16+X),Y Hard(BY*16+80+Y),45+BAGDIR
Sprite 0,X Hard(BX*16+X+XM),Y Hard(BY*16+Y+YM+64),TIE
If A<15 : Multi Wait : End If
Next
Add BX,TX
Add BY,TY
Else
If BX+TX+TX<0 or BX+TX+TX>12 or BY+TY+TY<0 or BY+TY+TY>9
If SOU
Extension_8_13F4 4,23,8000
End If
F=F(BX+TX,BY+TY)
X=(BX+TX)*16+16 : Y=(BY+TY)*16+80
SX=Rnd(16)-8 : SY=-Rnd(8)
Sprite 2,X Hard(X),Y Hard(Y),F+1
Multi Wait : Multi Wait
Ink 15,0 : Set Pattern -1
Bar(BX+TX)*16+16,(BY+TY)*16+80 To(BX+TX)*16+31,(BY+TY)*16+95
Put Block 1,(BX+TX)*16+16,(BY+TY)*16+80
Repeat
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse)
Sprite 0,X Hard(BX*16+XM),Y Hard(BY*16+YM+64),TIE
Sprite 2,X Hard(X),Y Hard(Y),F+1
Add X,SX : Add Y,SY : Inc SY
Multi Wait
Until X<-16 or X>320 or Y>256
Add SCORE,25
Ink 1,0 : Text 260,112+TB, Extension_8_0EB8(SCORE,5)
F(BX+TX,BY+TY)=0
Sprite Off 2
Dec NUMTUBES
Else
F=F(BX+TX,BY+TY)
If F(BX+TX+TX,BY+TY+TY)=0 and F>0
If SOU
Extension_8_147C 1,32
EVOL=64 : Extension_8_147C 8,EVOL : Extension_8_161E 8,8000-(64-EVOL)*32
End If
X=0 : Y=0
For A=0 To 15
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse)
Add X,TX : Add Y,TY
Sprite 6,X Hard(BX*16+16+X),Y Hard(BY*16+80+Y),45+BAGDIR
Sprite 0,X Hard(BX*16+X+XM),Y Hard(BY*16+Y+YM+64),TIE
Sprite 2,X Hard((BX+TX)*16+16+X),Y Hard((BY+TY)*16+80+Y),F+1
If A<15 : Multi Wait : End If
If A=1
Ink 15,0 : Set Pattern -1
Bar(BX+TX)*16+16,(BY+TY)*16+80 To(BX+TX)*16+31,(BY+TY)*16+95
Put Block 1,(BX+TX)*16+16,(BY+TY)*16+80
End If
If A=15
Put Block F+1,(BX+TX*2)*16+16,(BY+TY*2)*16+80
End If
Next
Add BX,TX
Add BY,TY
If SOU
Extension_8_147C 1,0
End If
F(BX,BY)=0 : F(BX+TX,BY+TY)=F
Sprite Off 2
Else
If SOU
For A=0 To 15
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse)
Sprite 0,X Hard(BX*16+XM),Y Hard(BY*16+YM+64),TIE
Extension_8_13F4 8,-25,10000-Abs(7-A)*300
Multi Wait : Multi Wait
Next
Extension_8_13F4 8,-25,8000
EVOL=64 : Extension_8_147C 8,EVOL : Extension_8_161E 8,8000-(64-EVOL)*32
Repeat
Multi Wait
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse)
MK=Mouse Key
Sprite 0,X Hard(BX*16+XM),Y Hard(BY*16+YM+64),TIE
If SOU
EVOL=Max(EVOL-1,16) : Extension_8_147C 8,EVOL : Extension_8_161E 8,8000-(64-EVOL)*32
End If
Until MK=0 and Fire(1)=0
End If
End If
End If
End If
End If
Loop
If SOU Then Extension_8_1400 15
Sprite Off
Pop Proc
GEDDIRECTION:
TX=(XM/16)-1 : TY=(YM/16)-1
TIE=40
If TX=-1 and TY=-1
If XM-YM<0
TX=-1 : TY=0
Else
TX=0 : TY=-1
End If
End If
If TX=1 and TY=-1
If(47-XM)-YM<0
TX=1 : TY=0
Else
TX=0 : TY=-1
End If
End If
If TX=-1 and TY=1
If XM-(47-YM)<0
TX=-1 : TY=0
Else
TX=0 : TY=1
End If
End If
If TX=1 and TY=1
If(47-XM)-(47-YM)<0
TX=1 : TY=0
Else
TX=0 : TY=1
End If
End If
If TX=-1 and TY=0 Then TIE=44 : TARDIR=0
If TX=1 and TY=0 Then TIE=42 : TARDIR=8
If TY=-1 and TX=0 Then TIE=41 : TARDIR=4
If TY=1 and TX=0 Then TIE=43 : TARDIR=12
Return
End Proc
Procedure WATERGO
Shared SCORE,NUMTUBES,TIME,LEVDIF,SOU,MUS,CURVSAM,CURVFREQ
Shared WX,WY,SX,SY
Ink 1,0 : Text 260,176+TB,"Done:"
X=8 : Y=8 : TUBES=0 : REALTUBES=0
If SOU Then Extension_8_13F4 1,-1,8000
F(SX,SY)=-Abs(F(SX,SY)) : VO=1
Do
Text 260,184+TB, Extension_8_0EC8(Min(TUBES*LEVDIF,NUMTUBES*100)/NUMTUBES,4)+"%"
OX=SX*16+16 : OY=SY*16+80
Repeat
Extension_8_1030 OX+X-Abs(WY*5),OY+Y-Abs(WX*5) To OX+X+Abs(WY)*4,OY+Y+Abs(WX)*4,8,%1000
Multi Wait
Add X,WX : Add Y,WY
If X=8 and Y=8
F=Abs(F(SX,SY))
If P(F,2)=2
If SOU
Extension_8_13F4 Extension_8_04F8(VO),CURVSAM,CURVFREQ : Add VO,1,1 To 3
End If
BX=X : BY=Y
For A=1 To 4
Extension_8_1030 OX+BX-Abs(WY*4),OY+BY-Abs(WX*4) To OX+BX+Abs(WY*3),OY+BY+Abs(WX*3),8,%1000
Multi Wait
Add BX,WX : Add BY,WY
Next
Gosub CHECKCURVE
End If
End If
Until X<0 or X>15 or Y<0 or Y>15
If X<0 Then Dec SX : Add X,16
If Y<0 Then Dec SY : Add Y,16
If X>15 Then Inc SX : Add X,-16
If Y>15 Then Inc SY : Add Y,-16
Exit If SX<0 or SX>12 or SY<0 or SY>9
F=F(SX,SY)
If Y=0 Then R=0
If X=0 Then R=1
If X=7 and Y=7 Then R=2
If X=15 Then R=3
If Y=15 Then R=4
Exit If P(Abs(F),R)=0
F(SX,SY)=-Abs(F)
If F<0
If SOU
Extension_8_13F4 Extension_8_04F8(VO),12,9000 : Add VO,1,1 To 3
End If
Add TUBES,3 : Add SCORE,100 : Dec REALTUBES
End If
Add SCORE,25
Gr Writing 1
Ink 1,0 : Text 260,112+TB, Extension_8_0EB8(SCORE,5)
Inc TUBES : Inc REALTUBES
Loop
If SOU
Extension_8_1400 1
Extension_8_13F4 Extension_8_04F8(VO),11,9000 : Add VO,1,1 To 3
End If
For B=0 To 31
D(B,0)=X+SX*16+14+Rnd(4) : D(B,1)=Y+SY*16+78+Rnd(4)
Next
For A=1 To 32
For B=0 To 31
Extension_8_0388 D(B,0),D(B,1), Extension_8_039E(D(B,0),D(B,1)) or 8
Add D(B,0),WX+(Rnd(2)-1)*WY
Add D(B,1),WY+(Rnd(2)-1)*WX
Next
Next
If TUBES*LEVDIF<NUMTUBES*100
Gosub PICSAVE
Pop Proc[1]
End If
If REALTUBES=>NUMTUBES
If SOU
Extension_8_109E 3,43
End If
For A=0 To 999
Inc SCORE
Ink 1,0 : Text 260,112+TB, Extension_8_0EB8(SCORE,5)
If(A mod 4)=0 : Multi Wait : End If
Next
If SOU
Extension_8_10A8
End If
End If
If Key Shift and 8 Then Gosub PICSAVE
If TIME
For T=TIME To 0 Step -1
Add SCORE,5
T1=T/60 : T2=T mod 60
DUMMY$=Str$(T1)+Str$(T2)
Ink 1,0 : Text 260,136+TB, Extension_8_0EB8(T1,2)+":"+ Extension_8_0EB8(T2,2)
Ink 1,0 : Text 260,112+TB, Extension_8_0EB8(SCORE,5)
If SOU
Extension_8_13EA Extension_8_04F8(VO),16 : Add VO,1,0 To 3
End If
Multi Wait : Multi Wait
Next
End If
Pop Proc[0]
PICSAVE:
If Key Shift and 8
Screen Open 7,320,9,2,0
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
Palette 0,0
Screen Display 7,128,164,320,8
Centre "Saving tubes record picture"
Fade 1,0,$FFF : Multi Wait
Screen 0
Trap Save Iff "TubesRecord.iff"
Screen 7
Fade 1 : For A=0 To 16 : Multi Wait : Next
Screen Close 7
End If
Return
CHECKCURVE:
If P(F,0) and WY=0 Then WY=-1 : WX=0 : Return
If P(F,1) and WX=0 Then WY=0 : WX=-1 : Return
If P(F,3) and WX=0 Then WY=0 : WX=1 : Return
If P(F,4) and WY=0 Then WY=1 : WX=0 : Return
Return
End Proc
Procedure NEWRND[NR]
Reserve As Work 16,(NR and $FFFE)+10
B=0 : ST=Start(16)
For A=0 To NR-1
Poke ST+A,B+1
Add B,1,0 To 7
Next
For A=0 To NR-1
B=Rnd(NR-1)
A1=Peek(ST+B)
Poke ST+B,Peek(ST+A)
Poke ST+A,A1
Next
End Proc
Procedure CLRHISC
For A=1 To 15
HISC(A,0)=(16-A)*1000
HISC(A,1)=(16-A)
HISC$(A)="NO NAME YET!"
Next
End Proc
Procedure LOAHISC
If Exist("Tubes.his")=0 Then CLRHISC : SAVHISC : Pop Proc
Extension_8_0456 "Tubes.his",8
ST=Start(8)
For A=1 To 15
HISC$(A)=Peek$(ST,12) : Add ST,12
HISC(A,0)=Deek(ST) : Add ST,2
HISC(A,1)=Deek(ST) : Add ST,2
Next
End Proc
Procedure SAVHISC
Reserve As Work 8,15*(12+2+2)
ST=Start(8)
For A=1 To 15
Poke$ ST,HISC$(A) : Add ST,12
Doke ST,HISC(A,0) : Add ST,2
Doke ST,HISC(A,1) : Add ST,2
Next
Request Off
Trap Extension_8_0472 "Tubes.his",8
Request On
Erase 8
End Proc